// 节流辅助函数  
export function throttle(func, limit) {
	let lastFunc;
	let lastRan;
	return function() {
		const context = this;
		const args = arguments;
		if (!lastRan) {
			func.apply(context, args);
			lastRan = Date.now();
		} else {
			clearTimeout(lastFunc);
			lastFunc = setTimeout(function() {
				if ((Date.now() - lastRan) >= limit) {
					func.apply(context, args);
					lastRan = Date.now();
				}
			}, limit - (Date.now() - lastRan));
		}
	};
}

// 判断一个对象是否是空
export function isEmptyObject(obj) {
	return Object.keys(obj).length === 0 && obj.constructor === Object;
}

// 合并两个数组，并通过id去重; 并且把不存在的id放在数组最前面
export function isUniqueArray(array1, array2) {
	// 如果长度相同说明没有新增回复内容；只是在一级评论上回复作为数据统计
	if (array1.length == array2.length) {  
		return [...array2];
	} else {
		// 创建一个Map来存储array1中所有元素的引用，以id为键
		const mapFromArray1 = new Map(array1.map(item => [item.id, item]));
		
		// 过滤出array2中id在array1中不存在的元素，这些将放在最前面  
		const uniqueToArray2 = array2.filter(item => !mapFromArray1.has(item.id));
		
		// 从array2中移除已经在uniqueToArray2中的元素，这样我们就不会在结果中重复它们  
		const remainingFromArray2 = array2.filter(item => uniqueToArray2.findIndex(u => u.id === item.id) === -1);
		
		// 使用Map中的值（即array1的元素）来构建结果数组，但顺序可能不是原始的  
		// 如果需要保持array1的顺序，可以改用其他数据结构如数组+索引映射  
		const itemsFromArray1 = [...mapFromArray1.values()];
		
		// 合并数组：先在前面添加uniqueToArray2，然后是itemsFromArray1，最后（如果需要的话）是remainingFromArray2  
		// 但在这个特定情况下，由于我们已经从array2中移除了uniqueToArray2中的元素，remainingFromArray2将是array1和array2中共有的元素  
		// 而这些元素已经在itemsFromArray1中了，所以我们不需要再次添加它们  
		return [...uniqueToArray2, ...itemsFromArray1];
	}
}